//package com.schoolvisitors.utils;
//
//import com.schoolvisitors.entity.*;
//import com.schoolvisitors.exception.BusinessException;
//import com.schoolvisitors.response.ResultCode;
//import com.schoolvisitors.vo.ReservationVo;
//import org.springframework.data.domain.Sort;
//
//import java.time.LocalDate;
//import java.time.LocalDateTime;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Map;
//import java.util.Set;
//import java.util.stream.Collectors;
//
//public class ReservationTool<T> {
//    private final List<T> reservations;
//
//    public ReservationTool(List<T> reservations) {
//        this.reservations = reservations;
//    }
//
//    public List<ReservationVo> toReservationVos(User user) {
//
//        List<ReservationVo> reservationVos = new ArrayList<>();
//
//        // 获取所有的 roomId 和 timeSlotId
//        Set<Long> roomIds = reservations.stream()
//                .map(reservations::getRoomId)
//                .collect(Collectors.toSet());
//        Set<Long> timeSlotIds = reservations.stream()
//                .map(reservations::getTimeSlotId)
//                .collect(Collectors.toSet());
//
//        // 批量查询所有的 Room 和 TimeSlot
//        Map<Long, Room> roomMap = roomRepository.findAllById(roomIds)
//                .stream()
//                .collect(Collectors.toMap(Room::getId, room -> room));
//        Map<Long, TimeSlot> timeSlotMap = timeSlotRepository.findAllById(timeSlotIds)
//                .stream()
//                .collect(Collectors.toMap(TimeSlot::getId, timeSlot -> timeSlot));
//        int i = 0;
//
//        for (CubicleReservation cubicleReservation : cubicleReservations) {
//            if (i++ > 6){
//                break;
//            }
//            ReservationVo reservationVo = new ReservationVo();
//
//            Room room = roomMap.get(cubicleReservation.getRoomId());
//            TimeSlot timeSlot = timeSlotMap.get(cubicleReservation.getTimeSlotId());
//            // 出现数据不同步
//            if (room == null || timeSlot == null) {
//                throw new BusinessException(ResultCode.UNKNOWN_ERROR);
//            }
//
//            Long reservationId = cubicleReservation.getId();
//            CubicleClock in = cubicleClockRepository.findByReservationIdAndType(reservationId, "in");
//            CubicleClock out = cubicleClockRepository.findByReservationIdAndType(reservationId, "out");
//            log.info("{} {}", in, in == null);
//            log.info("{}" + cubicleReservation.getDate());
//            reservationVo.setId(reservationId);
//            reservationVo.setReservationDate(cubicleReservation.getDate());  // 设置预定日期
//
////            LocalDate chinaLocalDate = cubicleReservation.getCreateAt()  // 获取 UTC 时间戳
////                    .atZone(ZoneId.of("Asia/Shanghai"))  // 转换为中国时间
////                    .toLocalDate();  // 提取日期部分
//
//            reservationVo.setCreateDate(LocalDate.from(cubicleReservation.getCreateAt()));      // 设置创建日期
//            reservationVo.setRealName(user.getRealName());  // 设置用户真实姓名
//            reservationVo.setStartTime(timeSlot.getStartTime());  // 设置开始时间（14:00:00）
//            reservationVo.setEndTime(timeSlot.getEndTime()); // 设置结束时间（16:00:00）
//
//            reservationVo.setRoomSubTypeName(room.getSubType()); // 设置房间具体类型名称
//            reservationVo.setRoomTypeName(room.getType());
//            reservationVo.setRoomNumber(room.getNumber()); // 设置房间号
//
//            reservationVo.setFloorId(room.getFloorId());
////            reservationVo.setFloorName();
//            reservationVo.setCubicleNumber(cubicleReservation.getCubicleNumber());
//
//            // 获取预约日期和时间合成完整的预约开始时间
//            LocalDateTime reservationStartDateTime = LocalDateTime.of(cubicleReservation.getDate(), timeSlot.getStartTime());
//            LocalDateTime now = LocalDateTime.now();
//
//            switch (cubicleReservation.getStatus()) {
//                case PENDING -> {
//                    reservationVo.setError("审核中");
//                    reservationVo.setCancelableStatus(true);
//                    reservationVo.setSignedInStatus(false); // 设置是否可签到
//                    reservationVo.setSignedOutStatus(false);  // 设置是否可签退
//                }
//                case REJECTED -> {
//                    reservationVo.setError("未通过");
//                    reservationVo.setCancelableStatus(false); // 设置是否可以取消
//                    reservationVo.setSignedInStatus(false); // 设置是否可签到
//                    reservationVo.setSignedOutStatus(false);  // 设置是否可签退
//                }
//                case CANCELLED -> {
//                    reservationVo.setError("已取消");
//                    reservationVo.setCancelableStatus(false); // 设置是否可以取消
//                }
//                default -> {
//
//                    reservationVo.setSignedInStatus(in == null); // 设置是否可签到
//                    reservationVo.setSignedOutStatus((in != null && out == null));  // 设置是否可签退
//
//                    // 已超过预约开始时间，不允许取消
//                    if (now.isAfter(reservationStartDateTime)) {
//                        reservationVo.setCancelableStatus(false);
//                    } else {
//                        reservationVo.setCancelableStatus(true);
//                    }
//                }
//            }
//
//            reservationVos.add(reservationVo);
//        }
//        return reservationVos;
//    }
//}
